package com.yfk.base.utils;

import com.yfk.web.controller.YFKController;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.UUID;

public class FileHandlerUtils {
    public static Logger logger = LoggerFactory.getLogger(FileHandlerUtils.class);

    /**
     * 从远程URL下载文件到临时文件
     * @param fileUrl
     * @return
     * @throws Exception
     */
    public static File downloadFileFromUrl(String fileUrl, String fileName) throws Exception {
        // 生成临时文件名（保留原文件名和扩展名）
        String uuid = "D:\\defproject\\logs\\" + UUID.randomUUID()+"\\";
        String path = uuid+fileName;
        logger.info("###临时文件下载路径【{}】",path);
        File tempFile = new File(path);
        // 如果文件不存在
        if (!tempFile.exists()) {
            // 创建父目录（包括任何必要但不存在的父目录）
            File parentDir = tempFile.getParentFile();
            if (!parentDir.exists()) {
                parentDir.mkdirs(); // 创建所有不存在的父目录
            }
            // 创建新文件
            tempFile.createNewFile();
        }
        try (InputStream in = new URL(fileUrl).openStream()) {
            Files.copy(in, tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
        }
        logger.info("###临时文件下载完毕!");
        return tempFile;
    }

    /**
     * 上传文件到目标服务器
     * @param file
     * @param uploadURL
     * @throws Exception
     */
    public static String uploadFile(File file,String uploadURL) throws Exception {
        OkHttpClient client = new OkHttpClient();
        String result = "";
        // 构建请求体
        RequestBody requestBody = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("files", file.getName(),
                        RequestBody.create(MediaType.parse("application/octet-stream"), file))
                // 添加其他必要的参数
//                .addFormDataPart("otherParam", "参数值")
                .build();
        // 构建请求
        Request request = new Request.Builder()
                .url(uploadURL)
                .post(requestBody)
                .build();

        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) {
                throw new Exception(response.body().string());
            }
            result = response.body().string();
        }
        return result;
    }

    /**
     * 删除指定文件
     * @param filePath
     * @throws Exception
     */
    public static void deleteDownloadFile(String filePath) throws Exception {
        try {
            // 方式一：使用 delete 方法，文件不存在时抛异常
            // Files.delete(Paths.get(filePath));
            // 方式二：使用 deleteIfExists 方法，文件存在则删除，返回是否删除成功
            boolean isDeleted = Files.deleteIfExists(Paths.get(filePath));
//            if (!isDeleted) {
//                logger.info("文件删除成功");
//            } else {
//                logger.info("文件不存在，未执行删除操作");
//            }
        } catch (Exception e) {
            throw new Exception("删除文件【"+filePath+"】时发生异常：" + e.getMessage());
        }
    }
}
